4 import controllers
.SelectionController
;
5 import controllers
.actions
.*;
7 import java
.awt
.event
.ActionEvent
;
8 import java
.awt
.event
.ActionListener
;
9 import java
.awt
.event
.KeyEvent
;
13 import javax
.swing
.undo
.*;
16 public class GraphFrame
extends JFrame
{
17 private static final long serialVersionUID
= -7929100929760152271L;
18 private GraphPanel panel
;
19 private UndoManager undoManager
;
21 private JMenuBar menubar
;
22 private JMenu menuOptionFile
;
23 private JMenu menuOptionEdit
;
25 private JMenuItem menuOptionFileClose
;
26 private JMenuItem menuOptionFileOpen
;
27 private SelectionController selectionController
;
28 private ActionListener onMenuFileClose
;
29 private ActionListener onMenuFileOpen
;
31 private JMenuItem menuOptionEditUndo
;
32 private JMenuItem menuOptionsEditRedo
;
33 private JMenuItem menuOptionEditAddNode
;
34 private JMenuItem menuOptionEditAddEdge
;
35 private JMenuItem menuOptionEditRemoveNode
;
36 private JMenuItem menuOptionFileSave
;
38 private ActionListener onMenuFileSave
;
39 private ActionListener onMenuEditUndo
;
40 private ActionListener onMenuEditRedo
;
41 private ActionListener onMenuEditAddNode
;
42 private ActionListener onMenuEditAddEdge
;
43 private ActionListener onMenuEditDeleteNode
;
45 public GraphFrame(GraphModel model
){
47 this.setTitle("Graph Editor");
48 this.setSize(500, 500);
49 menubar
= new JMenuBar();
50 this.setFocusable(true);
52 menuOptionFile
= new JMenu("File");
53 menuOptionFile
.setMnemonic(KeyEvent
.VK_F
);
54 menuOptionEdit
= new JMenu("Edit");
55 menuOptionEdit
.setMnemonic(KeyEvent
.VK_E
);
57 menuOptionFileClose
= new JMenuItem("Close program",KeyEvent
.VK_C
);
58 menuOptionFileClose
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_E
, Event
.CTRL_MASK
));
60 menuOptionFileOpen
= new JMenuItem("Openen",KeyEvent
.VK_O
);
61 menuOptionFileOpen
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_O
, Event
.CTRL_MASK
));
63 menuOptionEditUndo
= new JMenuItem("Ongedaan maken",KeyEvent
.VK_Z
);
64 menuOptionEditUndo
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_Z
, Event
.CTRL_MASK
));
66 menuOptionEditAddNode
= new JMenuItem("Knoop toevoegen",KeyEvent
.VK_N
);
67 menuOptionEditAddNode
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_N
, Event
.CTRL_MASK
));
69 menuOptionEditAddEdge
= new JMenuItem("Kant toevoegen",KeyEvent
.VK_M
);
70 menuOptionEditAddEdge
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_M
, Event
.CTRL_MASK
));
72 menuOptionEditRemoveNode
= new JMenuItem("Delete Node",KeyEvent
.VK_D
);
73 menuOptionEditRemoveNode
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_DELETE
,Event
.SHIFT_MASK
));
75 menuOptionsEditRedo
= new JMenuItem("Herhalen",KeyEvent
.VK_R
);
76 menuOptionsEditRedo
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_R
,Event
.CTRL_MASK
));
78 menuOptionFileSave
= new JMenuItem("Opslaan",KeyEvent
.VK_S
);
79 menuOptionFileSave
.setAccelerator(KeyStroke
.getKeyStroke(KeyEvent
.VK_S
,Event
.CTRL_MASK
));
81 onMenuFileSave
= new ActionListener(){
82 public void actionPerformed(ActionEvent arg0
) {
88 onMenuFileClose
= new ActionListener(){
89 public void actionPerformed(ActionEvent arg0
) {
90 System
.exit(0); // TODO Werkt niet goed?
93 onMenuFileOpen
= new ActionListener(){
94 public void actionPerformed(ActionEvent arg0
) {
98 onMenuEditUndo
= new ActionListener(){
99 public void actionPerformed(ActionEvent arg0
) {
101 notifyUndoManagerChanged();
104 onMenuEditAddNode
= new ActionListener(){
105 public void actionPerformed(ActionEvent arg0
) {
106 GraphFrame
.this.undoManager
.addEdit(new AddNode(GraphFrame
.this.selectionController
));
107 notifyUndoManagerChanged();
110 onMenuEditAddEdge
= new ActionListener(){
111 public void actionPerformed(ActionEvent arg0
) {
112 selectionController
.doAddEdge();
113 notifyUndoManagerChanged();
117 onMenuEditDeleteNode
= new ActionListener(){
118 public void actionPerformed(ActionEvent arg0
){
119 undoManager
.addEdit(new DeleteNode(selectionController
));
120 notifyUndoManagerChanged();
123 onMenuEditRedo
= new ActionListener(){
124 public void actionPerformed(ActionEvent arg0
){
126 notifyUndoManagerChanged();
130 menuOptionFileClose
.addActionListener(onMenuFileClose
);
131 menuOptionEditAddNode
.addActionListener(onMenuEditAddNode
);
132 menuOptionEditAddEdge
.addActionListener(onMenuEditAddEdge
);
133 menuOptionEditUndo
.addActionListener(onMenuEditUndo
);
134 menuOptionFileOpen
.addActionListener(onMenuFileOpen
);
135 menuOptionEditRemoveNode
.addActionListener(onMenuEditDeleteNode
);
136 menuOptionsEditRedo
.addActionListener(onMenuEditRedo
);
137 menuOptionFileSave
.addActionListener(onMenuFileSave
);
139 menuOptionFile
.add(menuOptionFileOpen
);
140 menuOptionFile
.add(menuOptionFileSave
);
141 menuOptionFile
.addSeparator();
142 menuOptionFile
.add(menuOptionFileClose
);
144 menuOptionEdit
.add(menuOptionEditAddNode
);
145 menuOptionEdit
.add(menuOptionEditAddEdge
);
146 menuOptionEdit
.addSeparator();
147 menuOptionEdit
.add(menuOptionEditUndo
);
148 menuOptionEdit
.add(menuOptionsEditRedo
);
149 menuOptionEdit
.add(menuOptionEditRemoveNode
);
151 menubar
.add(menuOptionFile
);
152 menubar
.add(menuOptionEdit
);
153 setJMenuBar(menubar
);
155 panel
= new GraphPanel(model
);
157 undoManager
= new UndoManager();
158 this.notifyUndoManagerChanged();
163 private void openFile()
165 final JFileChooser fc
= new JFileChooser();
166 int returnVal
= fc
.showOpenDialog(this);
167 if(returnVal
== JFileChooser
.APPROVE_OPTION
){
168 doOpenFile(fc
.getSelectedFile());
172 private void notifyUndoManagerChanged(){
173 menuOptionsEditRedo
.setEnabled(undoManager
.canRedo());
174 menuOptionEditUndo
.setEnabled(undoManager
.canUndo());
176 menuOptionsEditRedo
.setText(this.undoManager
.getRedoPresentationName());
177 menuOptionEditUndo
.setText(this.undoManager
.getUndoPresentationName());
181 private void doOpenFile(File f
) {
183 GraphModel model
= GraphModel
.fromFile(f
);
184 panel
.setModel(model
);
185 this.undoManager
.discardAllEdits();
186 notifyUndoManagerChanged();
187 } catch (Exception e
) {
191 "An error occured trying to read the input file. \r\n" + e
192 .getMessage(), "Error",
193 JOptionPane
.ERROR_MESSAGE
);
197 private void saveFile()
199 final JFileChooser fc
= new JFileChooser();
200 int returnVal
= fc
.showSaveDialog(this);
201 if(returnVal
== JFileChooser
.APPROVE_OPTION
){
202 File file
= fc
.getSelectedFile();
204 panel
.getModel().writeToFile(file
);
206 JOptionPane
.showMessageDialog(this, (String
)("An error occured trying to save the current state to a file. \r\n" + e
.getMessage()) , "Error",JOptionPane
.ERROR_MESSAGE
);
211 public void addAction(UndoableEdit action
){
212 undoManager
.addEdit(action
);
213 notifyUndoManagerChanged();
216 public void selectedObject(boolean selected
) {
217 menuOptionEditAddEdge
.setEnabled(selected
);
218 menuOptionEditRemoveNode
.setEnabled(selected
);
221 public void setSelectionController(SelectionController s
) {
222 selectionController
= s
;
223 this.getPanel().setSelectionController(s
);
225 public GraphPanel
getPanel()